﻿Imports System.Runtime.CompilerServices

Module Extensions

#Region "ArtikelsRow"

    <Extension()> _
    Public Function PrijsExclusiefBtw(ByVal artikel As ArtikelsDataSet.ArtikelsRow) As Decimal
        Return artikel.Prijs * 100D / (100D + Convert.ToDecimal(artikel.BTW))
    End Function

    <Extension()> _
    Public Function TotaalPrijsInclusiefBtw(ByVal artikel As ArtikelsDataSet.ArtikelsRow) As Decimal
        'Return (artikel.Prijs + artikel.StatiegeldEuro) * artikel.Voorraad
        Return artikel.Prijs * artikel.Voorraad
    End Function

    <Extension()> _
    Public Function TotaalPrijsExclusiefBtw(ByVal artikel As ArtikelsDataSet.ArtikelsRow) As Decimal
        Dim prijsExclusiefBtw As Decimal = artikel.PrijsExclusiefBtw()
        'Return (prijsExclusiefBtw + artikel.StatiegeldEuro) * artikel.Voorraad
        Return prijsExclusiefBtw * artikel.Voorraad
    End Function

    <Extension()> _
    Public Function StockWaarde(ByVal artikel As ArtikelsDataSet.ArtikelsRow) As Decimal
        Dim prijsExclusiefBtw As Decimal = artikel.PrijsExclusiefBtw()
        If (artikel.Inkoopprijs > 0D AndAlso artikel.Inkoopprijs < prijsExclusiefBtw) Then
            'Return (artikel.Inkoopprijs + artikel.StatiegeldEuro) * artikel.Voorraad
            Return artikel.Inkoopprijs * artikel.Voorraad
        Else
            'Return (prijsExclusiefBtw + artikel.StatiegeldEuro) * artikel.Voorraad
            Return prijsExclusiefBtw * artikel.Voorraad
        End If
    End Function

    <Extension()> _
    Public Function OmschrijvingIngekort(ByVal artikel As ArtikelsDataSet.ArtikelsRow, ByVal aantalTekens As Integer) As String
        If (artikel.Omschrijving.Length > aantalTekens) Then
            Return artikel.Omschrijving.Substring(0, aantalTekens) & "..."
        Else
            Return artikel.Omschrijving
        End If
    End Function

    ''' <summary>
    ''' </summary>
    ''' <param name="artikel"></param>
    ''' <returns></returns>
    ''' <remarks>Vermijd fouten met DBNull</remarks>
    <Extension()> _
    Public Function KortingLeverancierAsObject(ByVal artikel As ArtikelsDataSet.ArtikelsRow) As Object
        If (artikel.IsKortingLeverancierNull()) Then
            Return CType(DBNull.Value, Object)
        Else
            Return CType(artikel.KortingLeverancier, Object)
        End If
    End Function

#End Region

#Region "VerkoopsDetailsRow"

    ''' <summary>
    ''' Omschrijving van het artikel, plus eventueel een extra omschrijving bij "Onbekend artikel"
    ''' </summary>
    ''' <param name="verkoopsdetail"></param>
    ''' <returns></returns>
    <Extension()> _
    Public Function VolledigeOmschrijving(ByVal verkoopsdetail As ArtikelsDataSet.VerkoopsDetailsRow) As String
        If (verkoopsdetail.IsExtraOmschrijvingNull() OrElse verkoopsdetail.ExtraOmschrijving.Length = 0) Then
            Return verkoopsdetail.ArtikelsRow.Omschrijving
        Else
            Return String.Format("{0} - {1}", verkoopsdetail.ExtraOmschrijving, verkoopsdetail.ArtikelsRow.Omschrijving)
        End If
    End Function

    <Extension()> _
    Public Function IsLeeggoed(ByVal verkoopsdetail As ArtikelsDataSet.VerkoopsDetailsRow) As Boolean
        Return verkoopsdetail.ArtikelsRow.IsLeeggoed()
    End Function

    <Extension()> _
    Public Function IsCheque(ByVal verkoopsdetail As ArtikelsDataSet.VerkoopsDetailsRow) As Boolean
        Return verkoopsdetail.ArtikelsRow.IsCheque()
    End Function

    <Extension()> _
    Public Function IsAfgerekend(ByVal verkoopsdetail As ArtikelsDataSet.VerkoopsDetailsRow) As Boolean
        Return verkoopsdetail.Status = StatusImage.Afgerekend
    End Function

    <Extension()> _
    Public Sub HerberekenTotaal(ByVal verkoopsdetail As ArtikelsDataSet.VerkoopsDetailsRow)
        ' Nota: TotaalStatiegeld wordt berekend met een vaste expressie in de dataset
        '       Totaal zit in de datatable om het gemakkelijk te kunnen tonen in een grid, maar het wordt niet vanzelf berekend
        If (verkoopsdetail.IsLeeggoed) Then
            ' bij leeggoed moet het Totaal op 0 blijven staan, alleen statiegeld is daar ingevuld
            verkoopsdetail.Totaal = 0D
        Else
            verkoopsdetail.Totaal = verkoopsdetail.Prijs * verkoopsdetail.Aantal
        End If
    End Sub

    <Extension()> _
    Public Sub HerberekenTotaalEnStatiegeld(ByVal verkoopsdetail As ArtikelsDataSet.VerkoopsDetailsRow)
        ' Nota: TotaalStatiegeld wordt berekend met een vaste expressie in de dataset
        '       Totaal zit in de datatable om het gemakkelijk te kunnen tonen in een grid, maar het wordt niet vanzelf berekend
        If (verkoopsdetail.IsLeeggoed) Then
            ' bij leeggoed moet het Totaal op 0 blijven staan, alleen statiegeld is daar ingevuld
            verkoopsdetail.Totaal = 0D
            verkoopsdetail.StatiegeldEuro = verkoopsdetail.ArtikelsRow.Prijs
        Else
            verkoopsdetail.Totaal = verkoopsdetail.Prijs * verkoopsdetail.Aantal
            verkoopsdetail.StatiegeldEuro = verkoopsdetail.ArtikelsRow.StatiegeldEuro
        End If
    End Sub

    <Extension()> _
    Public Sub PasAantalAan(ByVal verkoopsdetail As ArtikelsDataSet.VerkoopsDetailsRow, ByVal nieuwAantal As Integer)
        verkoopsdetail.Aantal = nieuwAantal
        verkoopsdetail.HerberekenTotaalEnStatiegeld()
    End Sub

#End Region

End Module

